﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using log4net;
using Telerik.WinControls.UI;
using Telerik.WinControls.Data;
using System.IO;
using System.Text.RegularExpressions;
namespace QuanLyNhaSach
{
    public partial class frmDieuChinhKho : Form
    {
        //Tao Parttern Seleton
        static frmDieuChinhKho doituong = null;
        #region "Khai bao bien"
        private ILog logger;
        sv_QuanLyNhaSach.AdapterClient service = new sv_QuanLyNhaSach.AdapterClient();
        int stt = 0;
        int vitri;
        double tongtien = 0;
        int soLuongKiemTra = 0;
        #endregion
        #region "Ham chuyen so thanh chu"
        private static string Chu(string gNumber)
        {
            string result = "";
            switch (gNumber)
            {
                case "0":
                    result = "không";
                    break;
                case "1":
                    result = "một";
                    break;
                case "2":
                    result = "hai";
                    break;
                case "3":
                    result = "ba";
                    break;
                case "4":
                    result = "bốn";
                    break;
                case "5":
                    result = "năm";
                    break;
                case "6":
                    result = "sáu";
                    break;
                case "7":
                    result = "bảy";
                    break;
                case "8":
                    result = "tám";
                    break;
                case "9":
                    result = "chín";
                    break;
            }
            return result;
        }
        private static string Donvi(string so)
        {
            string Kdonvi = "";

            if (so.Equals("1"))
                Kdonvi = "";
            if (so.Equals("2"))
                Kdonvi = "nghìn";
            if (so.Equals("3"))
                Kdonvi = "triệu";
            if (so.Equals("4"))
                Kdonvi = "tỷ";
            if (so.Equals("5"))
                Kdonvi = "nghìn tỷ";
            if (so.Equals("6"))
                Kdonvi = "triệu tỷ";
            if (so.Equals("7"))
                Kdonvi = "tỷ tỷ";

            return Kdonvi;
        }
        private static string Tach(string tach3)
        {
            string Ktach = "";
            if (tach3.Equals("000"))
                return "";
            if (tach3.Length == 3)
            {
                string tr = tach3.Trim().Substring(0, 1).ToString().Trim();
                string ch = tach3.Trim().Substring(1, 1).ToString().Trim();
                string dv = tach3.Trim().Substring(2, 1).ToString().Trim();
                if (tr.Equals("0") && ch.Equals("0"))
                    Ktach = " không trăm lẻ " + Chu(dv.ToString().Trim()) + " ";
                if (!tr.Equals("0") && ch.Equals("0") && dv.Equals("0"))
                    Ktach = Chu(tr.ToString().Trim()).Trim() + " trăm ";
                if (!tr.Equals("0") && ch.Equals("0") && !dv.Equals("0"))
                    Ktach = Chu(tr.ToString().Trim()).Trim() + " trăm lẻ " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && dv.Equals("0"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi ";
                if (tr.Equals("0") && Convert.ToInt32(ch) > 1 && dv.Equals("5"))
                    Ktach = " không trăm " + Chu(ch.Trim()).Trim() + " mươi lăm ";
                if (tr.Equals("0") && ch.Equals("1") && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = " không trăm mười " + Chu(dv.Trim()).Trim() + " ";
                if (tr.Equals("0") && ch.Equals("1") && dv.Equals("0"))
                    Ktach = " không trăm mười ";
                if (tr.Equals("0") && ch.Equals("1") && dv.Equals("5"))
                    Ktach = " không trăm mười lăm ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi " + Chu(dv.Trim()).Trim() + " ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && dv.Equals("0"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi ";
                if (Convert.ToInt32(tr) > 0 && Convert.ToInt32(ch) > 1 && dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm " + Chu(ch.Trim()).Trim() + " mươi lăm ";
                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && Convert.ToInt32(dv) > 0 && !dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười " + Chu(dv.Trim()).Trim() + " ";

                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && dv.Equals("0"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười ";
                if (Convert.ToInt32(tr) > 0 && ch.Equals("1") && dv.Equals("5"))
                    Ktach = Chu(tr.Trim()).Trim() + " trăm mười lăm ";

            }


            return Ktach;

        }
        public static string So_chu(double gNum)
        {
            if (gNum == 0)
                return "Không đồng";

            string lso_chu = "";
            string tach_mod = "";
            string tach_conlai = "";
            double Num = Math.Round(gNum, 0);
            string gN = Convert.ToString(Num);
            int m = Convert.ToInt32(gN.Length / 3);
            int mod = gN.Length - m * 3;
            string dau = "[+]";

            // Dau [+ , - ]
            if (gNum < 0)
                dau = "[-]";
            dau = "";

            // Tach hang lon nhat
            if (mod.Equals(1))
                tach_mod = "00" + Convert.ToString(Num.ToString().Trim().Substring(0, 1)).Trim();
            if (mod.Equals(2))
                tach_mod = "0" + Convert.ToString(Num.ToString().Trim().Substring(0, 2)).Trim();
            if (mod.Equals(0))
                tach_mod = "000";
            // Tach hang con lai sau mod :
            if (Num.ToString().Length > 2)
                tach_conlai = Convert.ToString(Num.ToString().Trim().Substring(mod, Num.ToString().Length - mod)).Trim();

            ///don vi hang mod 
            int im = m + 1;
            if (mod > 0)
                lso_chu = Tach(tach_mod).ToString().Trim() + " " + Donvi(im.ToString().Trim());
            /// Tach 3 trong tach_conlai

            int i = m;
            int _m = m;
            int j = 1;
            string tach3 = "";
            string tach3_ = "";

            while (i > 0)
            {
                tach3 = tach_conlai.Trim().Substring(0, 3).Trim();
                tach3_ = tach3;
                lso_chu = lso_chu.Trim() + " " + Tach(tach3.Trim()).Trim();
                m = _m + 1 - j;
                if (!tach3_.Equals("000"))
                    lso_chu = lso_chu.Trim() + " " + Donvi(m.ToString().Trim()).Trim();
                tach_conlai = tach_conlai.Trim().Substring(3, tach_conlai.Trim().Length - 3);

                i = i - 1;
                j = j + 1;
            }
            if (lso_chu.Trim().Substring(0, 1).Equals("k"))
                lso_chu = lso_chu.Trim().Substring(10, lso_chu.Trim().Length - 10).Trim();
            if (lso_chu.Trim().Substring(0, 1).Equals("l"))
                lso_chu = lso_chu.Trim().Substring(2, lso_chu.Trim().Length - 2).Trim();
            if (lso_chu.Trim().Length > 0)
                lso_chu = dau.Trim() + " " + lso_chu.Trim().Substring(0, 1).Trim().ToUpper() + lso_chu.Trim().Substring(1, lso_chu.Trim().Length - 1).Trim() + " đồng chẵn.";

            return lso_chu.ToString().Trim();

        }
        #endregion
        public static frmDieuChinhKho TaoDoiTuong()
        {
            if (doituong == null)
                doituong = new frmDieuChinhKho();
            return doituong;
        }
        public frmDieuChinhKho()
        {
            InitializeComponent();
        }
        DataSet dsMatHang;
        private void frmDieuChinhKho_Load(object sender, EventArgs e)
        {                        
            //enter
            txtChungtu.KeyDown += new KeyEventHandler(txtChungtu_KeyDown);
            cmbKhoNhan.KeyDown += new KeyEventHandler(cmbKhoNhan_KeyDown);
            cmbKhoXuat.KeyDown += new KeyEventHandler(cmbKhoXuat_KeyDown);
            cmbNhanVienNhan.KeyDown += new KeyEventHandler(cmbNhanVienNhan_KeyDown);
            cmbTenHang.KeyDown += new KeyEventHandler(cmbTenHang_KeyDown);
            txtSoLuong.KeyDown += new KeyEventHandler(txtSoLuong_KeyDown);
            this.KeyDown+=new KeyEventHandler(frmDieuChinhKho_KeyDown);
            //-----
            DataSet dsNVNhan = new DataSet();
            DataSet dsNVXuat = new DataSet();
            dsMatHang = new DataSet();            
            try
            {                
                dtpNgayChuyen.Value = DateTime.Now;
                //txtChungtu.Focus();
                logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
                //load du lieu cho kho xuat
                Load_DSKhoXuat();

                //load du lieu cho kho nhan
                DataSet dsKhoNhan = new DataSet();            
                //Chinh do dai cua cac cot trong muiltcombobox
                RadMultiColumnComboBoxElement multiColumnComboElement1 = this.cmbKhoNhan.MultiColumnComboBoxElement;
                multiColumnComboElement1.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
                multiColumnComboElement1.DropDownMinSize = new Size(300, 200);

                dsKhoNhan.ReadXml(new StringReader(service.selectqueryByText("select makho,tenkho from kho")));
                if (dsKhoNhan.Tables.Count != 0)
                {
                    cmbKhoNhan.DataSource = dsKhoNhan.Tables[0];
                    cmbKhoNhan.DisplayMember = "tenkho";
                    cmbKhoNhan.ValueMember = "makho";
                    cmbKhoNhan.SelectedIndex = -1;
                }
                FilterDescriptor des_mh1 = new FilterDescriptor(this.cmbKhoNhan.DisplayMember, FilterOperator.StartsWith, string.Empty);
                cmbKhoNhan.EditorControl.FilterDescriptors.Add(des_mh1);
                //load du lieu nhan vien nhan
                //Chinh do dai cua cac cot trong muiltcombobox
                RadMultiColumnComboBoxElement multiColumnComboElement2 = this.cmbNhanVienNhan.MultiColumnComboBoxElement;
                multiColumnComboElement2.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
                multiColumnComboElement2.DropDownMinSize = new Size(300, 200);

                dsNVNhan.ReadXml(new StringReader(service.selectqueryByText("select manv,hotennv from nhanvien")));
                if (dsNVNhan.Tables.Count != 0)
                {
                    cmbNhanVienNhan.DataSource = dsNVNhan.Tables[0];
                    cmbNhanVienNhan.DisplayMember = "hotennv";
                    cmbNhanVienNhan.ValueMember = "manv";
                    cmbNhanVienNhan.SelectedIndex = -1;
                }
                FilterDescriptor des_mh2 = new FilterDescriptor(this.cmbNhanVienNhan.DisplayMember, FilterOperator.StartsWith, string.Empty);
                cmbNhanVienNhan.EditorControl.FilterDescriptors.Add(des_mh2);
                //load du lieu nhan vien xuat                    
                dsNVXuat.ReadXml(new StringReader(service.selectqueryByText("select manv,hotennv from nhanvien")));
                if (dsNVXuat.Tables.Count != 0)
                {
                    cmbNhanVienXuat.DataSource = dsNVXuat.Tables[0];
                    cmbNhanVienXuat.DisplayMember = "hotennv";
                    cmbNhanVienXuat.ValueMember = "manv";
                    for (int i = 0; i < cmbNhanVienXuat.EditorControl.Rows.Count; i++)
                    {
                        if (cmbNhanVienXuat.EditorControl.Rows[i].Cells["MaNV"].Value.ToString().Trim() == frmDangNhap.maNV_FromDangNhap)
                        {
                            cmbNhanVienXuat.EditorControl.Rows[i].IsCurrent = true;
                            return;
                        }
                    }
                }

                ////load du lieu cho mat hang
                //dsMatHang.ReadXml(new StringReader(service.LayDS_MatHang()));
                //if (dsMatHang.Tables.Count != 0)
                //{
                //    cmbTenHang.DataSource = dsMatHang.Tables[0];
                //    cmbTenHang.DisplayMember = "tenmh";
                //    cmbTenHang.ValueMember = "mamh";
                //    cmbTenHang.SelectedIndex = -1;
                //}    
                txtChungtu.Focus();
            }
            catch (Exception ex)
            {                
                logger.Error("Error: " + ex.Message);
            }
        }

        void cmbKhoNhan_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbNhanVienNhan.Focus();
        }

        void cmbKhoXuat_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbKhoNhan.Focus();
        }

        void cmbNhanVienNhan_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbTenHang.Focus();
        }

        void cmbTenHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                txtSoLuong.Focus();
        }

        void txtSoLuong_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                btnChuyen.Focus();
        }

        void txtChungtu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                cmbKhoXuat.Focus();
        }

        private void Load_DSKhoXuat()
        {
            DataSet dsKhoXuat = new DataSet();
            //Chinh do dai cua cac cot trong muiltcombobox
            RadMultiColumnComboBoxElement multiColumnComboElement = this.cmbKhoXuat.MultiColumnComboBoxElement;
            multiColumnComboElement.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
            multiColumnComboElement.DropDownMinSize = new Size(300, 200);

            dsKhoXuat.ReadXml(new StringReader(service.selectqueryByText("select makho,tenkho from kho")));
            if (dsKhoXuat.Tables.Count != 0)
            {
                cmbKhoXuat.DataSource = dsKhoXuat.Tables[0];
                cmbKhoXuat.DisplayMember = "tenkho";
                cmbKhoXuat.ValueMember = "makho";
                cmbKhoXuat.SelectedIndex = -1;
            }
            FilterDescriptor des_mh = new FilterDescriptor(this.cmbKhoXuat.DisplayMember, FilterOperator.StartsWith, string.Empty);
            cmbKhoXuat.EditorControl.FilterDescriptors.Add(des_mh);
        }

        private void cmbTenHang_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cmbTenHang.Text.Trim() == "")
                {
                    txtMaHang.Text = "";
                    txtDonGia.Text = "0";
                    txtThanhTien.Text = "0";
                    txtSoLuong.Text = "1";
                }
                else
                {
                    txtMaHang.Text = cmbTenHang.SelectedValue.ToString();
                    txtDonGia.Text = double.Parse(cmbTenHang.EditorControl.Rows[cmbTenHang.SelectedIndex].Cells["DonGiaNhap"].Value.ToString()).ToString("#,##0");
                    ddlDVT.Text = cmbTenHang.EditorControl.Rows[cmbTenHang.SelectedIndex].Cells["DVT"].Value.ToString();
                    txtSoLuong.Text = int.Parse(cmbTenHang.EditorControl.Rows[cmbTenHang.SelectedIndex].Cells["TongSLTon"].Value.ToString()).ToString();
                    txtThanhTien.Text = (double.Parse(txtDonGia.Text) * int.Parse(txtSoLuong.Text)).ToString("#,##0");                    
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private void txtSoLuong_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (txtDonGia.Text.Length != 0)
                {
                    if (txtSoLuong.Text.Length != 0)
                    {
                        double thanhtien = double.Parse(txtSoLuong.Text) * double.Parse(txtDonGia.Text);
                        txtThanhTien.Text = thanhtien.ToString("#,##0");
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private void btnChuyen_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtMaHang.Text.Trim() == "")
                {
                    errorProvider1.SetError(cmbTenHang, "Bạn chưa nhập mặt hàng...Vui lòng nhập.");
                    cmbTenHang.Focus();
                    return;
                }
                if (int.Parse(txtSoLuong.Text.Trim()) <= 1 || int.Parse(txtSoLuong.Text.Trim()) > int.Parse(cmbTenHang.EditorControl.Rows[cmbTenHang.SelectedIndex].Cells["TongSLTon"].Value.ToString()))
                {
                    MessageBox.Show("Số lượng phải lớn hơn 0 và nhỏ hơn số lượng tồn hiện tại","Cảnh Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtSoLuong.Text = int.Parse(cmbTenHang.EditorControl.Rows[cmbTenHang.SelectedIndex].Cells["TongSLTon"].Value.ToString()).ToString("#,##0");
                    txtSoLuong.Focus();
                    return;
                }
                //Nếu cùng mặt hàng thì tăng số lượng và tiền lên trong Gridview
                if (gv_ChiTietDieuChinhKho1.Rows.Count > 0)
                {
                    for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                    {
                        if (txtMaHang.Text.Trim() == gv_ChiTietDieuChinhKho1.Rows[i].Cells["mamh"].Value.ToString().Trim())
                        {
                            gv_ChiTietDieuChinhKho1.Rows[i].Cells["soluong"].Value = (int.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["soluong"].Value.ToString()) + int.Parse(txtSoLuong.Text.Trim())).ToString("#,##0");
                            gv_ChiTietDieuChinhKho1.Rows[i].Cells["thanhtien"].Value = (int.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["soluong"].Value.ToString()) * double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["dongia"].Value.ToString())).ToString("#,##0");
                            txtTongtien.Text = tongtien.ToString("#,##0");
                            return;
                        }
                    }
                }                
                //khai bao bien
                string mahang = cmbTenHang.SelectedValue.ToString().Trim();
                string tenhang = cmbTenHang.Text;
                int soluong = int.Parse(txtSoLuong.Text);
                double dongia = double.Parse(txtDonGia.Text);
                double thanhtien = double.Parse(txtThanhTien.Text);
                //gan gia tri cho bien vitri
                if (gv_ChiTietDieuChinhKho1.Rows.Count > 0)
                    vitri = gv_ChiTietDieuChinhKho1.Rows.Count;
                else
                    vitri = 0;
                //them thong tin vao gridview
                gv_ChiTietDieuChinhKho1.Rows.AddNew();                
                gv_ChiTietDieuChinhKho1.Rows[vitri].Cells["mamh"].Value = mahang;
                gv_ChiTietDieuChinhKho1.Rows[vitri].Cells["tenmh"].Value = tenhang;
                gv_ChiTietDieuChinhKho1.Rows[vitri].Cells["soluong"].Value = soluong.ToString("#,##0");
                gv_ChiTietDieuChinhKho1.Rows[vitri].Cells["dongia"].Value = dongia.ToString("#,##0");
                gv_ChiTietDieuChinhKho1.Rows[vitri].Cells["thanhtien"].Value = thanhtien.ToString("#,##0");
                //them nut xoa vao mot dong gridview
                if (gv_ChiTietDieuChinhKho1.Columns.GetColumnByFieldName("xoa").Length == 0)
                {
                    GridViewCommandColumn btnColumn = new GridViewCommandColumn();
                    btnColumn.FieldName = "xoa";
                    btnColumn.Name = "xoa";
                    btnColumn.UseDefaultText = true;
                    btnColumn.DefaultText = "Xóa";
                    gv_ChiTietDieuChinhKho1.Columns.Insert(gv_ChiTietDieuChinhKho1.Columns.Count, btnColumn);
                }
                //Tao STT cho Girdview
                if (gv_ChiTietDieuChinhKho1.Rows.Count > 0)
                {                    
                    tongtien = 0;
                    for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                    {
                        gv_ChiTietDieuChinhKho1.Rows[i].Cells["STT"].Value = i + 1;
                        //Tinh Tong Tien
                        tongtien += double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["ThanhTien"].Value.ToString());
                    }
                    txtTongtien.Text = tongtien.ToString("#,##0");                    
                    txtTienChu.Text = So_chu(tongtien);
                }                                
                //reset lai cac control                
                txtGhiChu.Text = "";
                txtMaHang.Text = "";
                cmbTenHang.SelectedIndex = -1;
                txtSoLuong.Text = "1";
                ddlDVT.Text = "";
                txtDonGia.Text = "0";
                txtKhuyenMai.Text = "";
                txtThanhTien.Text = "0";
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private void bt_them_Click(object sender, EventArgs e)
        {
            
        }

        private string xulyma()
        {
            DataSet ds_tam = new DataSet();
            string mamoi;
            string chuoi = "DCK" + DateTime.Today.Year.ToString("0000") + DateTime.Today.Month.ToString("00");
            ds_tam.ReadXml(new StringReader(service.selectqueryByText("select top 1 mapdck from phieudieuchinhkho where mapdck like '%" + chuoi + "%'order by mapdck desc")));
            if (ds_tam.Tables.Count == 0)
                mamoi = chuoi + "0001";
            else
            {
                string matam = ds_tam.Tables[0].Rows[0][0].ToString();
                string kituso = matam.Substring(9, 4).ToString();
                int somoi = int.Parse(kituso) + 1;
                mamoi = chuoi + somoi.ToString("0000");
            }
            return mamoi;
        }

        private void txtTongtien_TextChanged(object sender, EventArgs e)
        {
            if (txtTongtien.Text.Length != 0)
            {
                txtTienChu.Text = So_chu(double.Parse(txtTongtien.Text));
            }
            else
            {
                txtTienChu.Text = "";
            }
        }

        private void gv_ChiTietDieuChinhKho1_CommandCellClick(object sender, EventArgs e)
        {
            try
            {
                double tongtien_sauxoa = 0;
                if (MessageBox.Show("Bạn muốn xóa thông tin mặt hàng này ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (gv_ChiTietDieuChinhKho1.Rows.Count == 1)
                    {
                        gv_ChiTietDieuChinhKho1.Rows.Clear();
                    }
                    else
                    {
                        gv_ChiTietDieuChinhKho1.Rows.RemoveAt(gv_ChiTietDieuChinhKho1.CurrentRow.Index);
                        for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                        {
                            gv_ChiTietDieuChinhKho1.Rows[i].Cells[0].Value = i + 1;
                        }
                    }
                    for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                    {
                        tongtien_sauxoa += double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["thanhtien"].Value.ToString());
                    }
                    txtTongtien.Text = tongtien_sauxoa.ToString("#,##0");                    
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }      

        private void frmDieuChinhKho_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if(e.KeyCode == Keys.F2)
                    cmbTenHang.Focus();
            }
            catch { }
        }

        private void bt_Luu_Click(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            try
            {
                if (txtChungtu.Text.Trim() == "")
                {
                    errorProvider1.SetError(txtChungtu, "Chưa nhập thông tin chứng từ!");
                    txtChungtu.Focus();
                    return;
                }
                if (dtpNgayChuyen.Value.ToShortDateString() != DateTime.Now.ToShortDateString())
                {
                    errorProvider1.SetError(dtpNgayChuyen, "Ngày chuyển phải bằng ngày hiện tại!");                    
                    dtpNgayChuyen.Focus();
                    return;
                }
                if (cmbNhanVienXuat.Text.Trim() == "")
                {
                    errorProvider1.SetError(cmbNhanVienXuat, "Chưa nhập thông tin nhân viên xuất!");
                    cmbNhanVienXuat.Focus();
                    return;
                }
                if (cmbNhanVienNhan.Text.Trim() == "")
                {
                    errorProvider1.SetError(cmbNhanVienNhan, "Chưa nhập thông tin nhân viên nhận!");
                    cmbNhanVienNhan.Focus();
                    return;
                }
                if (cmbKhoXuat.Text.Trim() == "")
                {
                    errorProvider1.SetError(cmbKhoXuat, "Chưa nhập thông tin kho xuất!");
                    cmbKhoXuat.Focus();
                    return;
                }
                if (cmbKhoNhan.Text.Trim() == "")
                {
                    errorProvider1.SetError(cmbKhoNhan, "Chưa nhập thông tin kho nhận!");
                    cmbKhoNhan.Focus();
                    return;
                }
                if (gv_ChiTietDieuChinhKho1.Rows.Count == 0 )
                {
                    MessageBox.Show("Chưa có mặt hàng. Vui lòng nhập mặt hàng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    cmbTenHang.Focus();
                    return;
                }
                else
                {
                    for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                        for (int j = 0; j < ds_ton.Tables[0].Rows.Count; j++)
                        {
                            if (gv_ChiTietDieuChinhKho1.Rows[i].Cells["MaMH"].Value.ToString().Trim() == ds_ton.Tables[0].Rows[j]["MaMH"].ToString().Trim())
                            {
                                if (int.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["SoLuong"].Value.ToString().Trim()) > int.Parse(ds_ton.Tables[0].Rows[j]["TongSLTon"].ToString().Trim()))
                                {

                                    lbl_ThongBao.Text = "Số lượng nhập vào không đủ. Vui lòng nhập lại";
                                    errorProvider1.RightToLeft = false;
                                    errorProvider1.SetError(lbl_ThongBao, "Xem lại thông tin trên lưới.");
                                    return;
                                }
                            }

                        }
                }
                //Khai bao thong tin bien
                int tongsoluongchuyen = 0;
                //tao thong tin phieu dieu chinh kho
                string mapdck = xulyma();
                if (!service.InsertPDCKho(mapdck, dtpNgayChuyen.Value, cmbNhanVienXuat.SelectedValue.ToString(), cmbNhanVienNhan.SelectedValue.ToString(), cmbKhoXuat.SelectedValue.ToString(), cmbKhoNhan.SelectedValue.ToString(), double.Parse(txtTongtien.Text)))
                {
                    MessageBox.Show("Lưu Phiếu Điều Chỉnh Kho thất bại...Vui lòng gặp kỹ thuật hoặc nhập lại mặt hàng khác.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    gv_ChiTietDieuChinhKho1.Rows.Clear();
                    return;
                }
                //luu chi tiet dieu chinh kho
                if (gv_ChiTietDieuChinhKho1.Rows.Count > 0)
                {
                    for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                    {
                        string mamh = gv_ChiTietDieuChinhKho1.Rows[i].Cells["mamh"].Value.ToString().Trim();
                        int soluongchuyen = int.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["soluong"].Value.ToString().Trim());
                        double dongia = double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["dongia"].Value.ToString().Trim());
                        double thanhtien = double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["thanhtien"].Value.ToString().Trim());
                        if (!service.InsertCTDieuChinhKho(mapdck, mamh, soluongchuyen, dongia, thanhtien))
                        {
                            MessageBox.Show("Lưu Phiếu Điều Chỉnh Kho thất bại...Vui lòng gặp kỹ thuật hoặc nhập lại mặt hàng khác.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            gv_ChiTietDieuChinhKho1.Rows.Clear();
                            return;
                        }
                    }
                    MessageBox.Show("Lưu Phiếu Điều Chỉnh thành công.","Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                //update lai so luong trong kho nhan va kho xuat
                for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                {
                    tongsoluongchuyen += int.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["soluong"].Value.ToString());
                }
                service.selectqueryByText("update kho set tongsoluongton=tongsoluongton-" + tongsoluongchuyen + "where makho='" + cmbKhoXuat.SelectedValue.ToString().Trim() + "'");
                service.selectqueryByText("update kho set tongsoluongton=tongsoluongton+" + tongsoluongchuyen + "where makho='" + cmbKhoNhan.SelectedValue.ToString().Trim() + "'");
                //resset lai bien                
                txtTongtien.Text = "";
                txtTienChu.Text = "";
                cmbTenHang.Text = "";
                // xoa cac dong gridview
                if (gv_ChiTietDieuChinhKho1.Rows.Count != 0)
                {
                    gv_ChiTietDieuChinhKho1.Rows.Clear();
                }
                Load_BaoCaoXuatNhapTon();
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private void bt_Dong_Click(object sender, EventArgs e)
        {
            FormChinh2.ActiveForm.Activate();
            this.Close();
        }

        private void cmbKhoXuat_SelectedIndexChanged(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            if (cmbKhoNhan.Text.Trim() != "" && cmbKhoXuat.Text.Trim() != "")
            {
                if (cmbKhoNhan.SelectedValue.ToString() == cmbKhoXuat.SelectedValue.ToString())
                {
                    errorProvider1.SetError(cmbKhoNhan,"Kho Xuất và Kho Nhận phải khác nhau! Yêu cầu bạn nhập các kho khác...");
                    cmbKhoNhan.Text = "";
                    cmbKhoNhan.Focus();
                    return;
                }                               
            }
            //Load Store Xuat Nhap Ton de Lay Mat Hang theo Kho Xuat
            if (cmbKhoXuat.Text.Trim() == "")
            {
                cmbTenHang.DataSource = null;
            }
            else
            {                
                try
                {
                    Load_BaoCaoXuatNhapTon();
                }
                catch (Exception ex)
                {
                    logger.Error("Error: " + ex.Message);
                } 
            }
        }

        private void Load_BaoCaoXuatNhapTon()
        {
            ds_ton = new DataSet();
            ds_ton.ReadXml(new StringReader(service.BaoCaoXuatNhapTon(DateTime.Now, DateTime.Now, cmbKhoXuat.SelectedValue.ToString().Trim(), "")));
            if (ds_ton.Tables.Count > 0)
            {
                for (int i = 0; i < ds_ton.Tables[0].Rows.Count; i++)
                {
                    if (int.Parse(ds_ton.Tables[0].Rows[i]["TongSLTon"].ToString()) < 1)
                        ds_ton.Tables[0].Rows[i].Delete();
                }
                cmbTenHang.DataSource = ds_ton.Tables[0];
                cmbTenHang.DisplayMember = "TenMH";
                cmbTenHang.ValueMember = "MaMH";
                cmbTenHang.SelectedIndex = -1;
            }
        }
        DataSet ds_ton;
        private void cmbNhanVienXuat_SelectedIndexChanged(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            if ( cmbNhanVienNhan.Text.Trim() != "" && cmbNhanVienXuat.Text.Trim() != "")
            {
                if (cmbNhanVienNhan.SelectedValue.ToString() == cmbNhanVienXuat.SelectedValue.ToString())
                {
                    errorProvider1.SetError(cmbNhanVienNhan, "Nhân Viên Xuất và Nhân Viên Nhận phải khác nhau! Yêu cầu bạn nhập các Nhân Viên khác...");
                    cmbNhanVienNhan.Text = "";
                    cmbNhanVienNhan.Focus();
                    return;
                }                
            }
        }

        private void txtSoLuong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void cmbKhoNhan_SelectedIndexChanged(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            if (cmbKhoNhan.Text.Trim() != "" && cmbKhoXuat.Text.Trim() != "")
            {
                if (cmbKhoNhan.SelectedValue.ToString() == cmbKhoXuat.SelectedValue.ToString())
                {
                    errorProvider1.SetError(cmbKhoNhan,"Kho Xuất và Kho Nhận phải khác nhau! Yêu cầu bạn nhập các kho khác...");
                    cmbKhoNhan.Text = "";
                    cmbKhoNhan.Focus();
                    return;
                }
            }        
        }

        private void gv_ChiTietDieuChinhKho1_CellValueChanged(object sender, GridViewCellEventArgs e)
        {
            errorProvider1.Clear();            
            try
            {
                for (int i = 0; i < ds_ton.Tables[0].Rows.Count; i++)
                {
                    if (gv_ChiTietDieuChinhKho1.CurrentRow.Cells["MaMH"].Value.ToString().Trim() == ds_ton.Tables[0].Rows[i]["MaMH"].ToString().Trim())
                    {
                        if (int.Parse(gv_ChiTietDieuChinhKho1.CurrentRow.Cells["SoLuong"].Value.ToString().Trim()) > int.Parse(ds_ton.Tables[0].Rows[i]["TongSLTon"].ToString().Trim()))
                        {
                            lbl_ThongBao.Text = "Số lượng nhập vào lớn hơn số lượng tồn hiện tại. Vui lòng nhập lại";
                            errorProvider1.RightToLeft = true;
                            errorProvider1.SetError(lbl_ThongBao, "Xem lại thông tin trên lưới.");
                            return;
                        }
                    }
                }
                if (Regex.IsMatch(gv_ChiTietDieuChinhKho1.CurrentRow.Cells["SoLuong"].Value.ToString().Trim(), @"^[0-9,',']{0,5}$") == false || int.Parse(gv_ChiTietDieuChinhKho1.CurrentRow.Cells["SoLuong"].Value.ToString()) < 0)
                {
                    lbl_ThongBao.Text = "Số lượng nhập vào phải lớn hơn không (số lượng > 0) và là con số nguyên. Vui lòng nhập lại";
                    errorProvider1.RightToLeft = true;
                    errorProvider1.SetError(lbl_ThongBao, "Xem lại thông tin trên lưới.");
                    return;
                }
                if (Regex.IsMatch(gv_ChiTietDieuChinhKho1.CurrentRow.Cells["DonGia"].Value.ToString(), @"^[0-9,',']{0,12}$") == false)
                {
                    lbl_ThongBao.Text = "Đơn giá nhập vào là số nguyên không âm. Vui lòng nhập lại";
                    errorProvider1.RightToLeft = true;
                    errorProvider1.SetError(lbl_ThongBao, "Xem lại thông tin trên lưới.");
                    return;
                }               
                lbl_ThongBao.Text = "Thông báo!";
                errorProvider1.RightToLeft = false;
            }
            catch (Exception ex)
            {
                logger.Error("Error: " + ex.Message);
            }
        }

        private void gv_ChiTietDieuChinhKho1_CellEndEdit(object sender, GridViewCellEventArgs e)
        {
            try
            {
                double tongtien_sausua = 0;
                double dongia = double.Parse(gv_ChiTietDieuChinhKho1.CurrentRow.Cells["DonGia"].Value.ToString());
                int soluong = int.Parse(gv_ChiTietDieuChinhKho1.CurrentRow.Cells["Soluong"].Value.ToString().Trim());                
                double thanhtien = (soluong * dongia);
                gv_ChiTietDieuChinhKho1.CurrentRow.Cells["ThanhTien"].Value = thanhtien.ToString("#,##0");

                for (int i = 0; i < gv_ChiTietDieuChinhKho1.Rows.Count; i++)
                {
                    gv_ChiTietDieuChinhKho1.Rows[i].Cells["SoLuong"].Value = double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["SoLuong"].Value.ToString()).ToString("#,##0");
                    gv_ChiTietDieuChinhKho1.Rows[i].Cells["DonGia"].Value = double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["DonGia"].Value.ToString()).ToString("#,##0");
                    tongtien_sausua += double.Parse(gv_ChiTietDieuChinhKho1.Rows[i].Cells["ThanhTien"].Value.ToString());
                }
                txtTongtien.Text = tongtien_sausua.ToString("#,##0");
            }
            catch
            {
            }
        }
    }
}
